home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / UTIL / SCREEN / MODEHISTORY / !ModeHist / Source (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1995-03-21  |  12KB  |  517 lines

  1.  This application is FreeWare. (c) 1995 Dick Alstein
  2. error
  3. quit%=
  4. +pollmask%=(1<<0)+(1<<7)+(1<<11)+(1<<12)
  5.  "Wimp_Poll",pollmask%,blk% 
  6.  reason%
  7.  reason% 
  8. -      
  9.  "Wimp_GetPointerInfo",,scrapblk%
  10. #      
  11.  scrapblk%!12=menuwin% 
  12.         ypos%=scrapblk%!4
  13.          scrapblk%!0=menuwin%
  14. /        
  15.  "Wimp_GetWindowState",,scrapblk%
  16. C        linenr%=(scrapblk%!16-scrapblk%!24-ypos%) 
  17.  iconheight%
  18. $        
  19.  linenr%<0 
  20.  linenr%=-1
  21. %        
  22.  linenr%<>currentline% 
  23. 0          
  24. menuwin_forceredraw(currentline%)
  25. "          currentline%=linenr%
  26. 0          
  27. menuwin_forceredraw(currentline%)
  28.         
  29.       
  30.  1 : 
  31. redraw(blk%!0)
  32. (    
  33.  2 : 
  34.  "Wimp_OpenWindow",,blk%
  35. )    
  36.  3 : 
  37.  "Wimp_CloseWindow",,blk%
  38.       
  39.  blk%!0=menuwin% 
  40. #        pollmask%=pollmask% 
  41. .        
  42. menuwin_forceredraw(currentline%)
  43.         currentline%=-1
  44.  .        
  45. menuwin_forceredraw(currentline%)
  46.       
  47.       
  48.  blk%!0=menuwin% 
  49. $'        pollmask%=pollmask% 
  50.         currentline%=-1
  51.       
  52. '?    
  53.  6 : 
  54. mouseclick(blk%!0,blk%!4,blk%!8,blk%!12,blk%!16)
  55. (*    
  56.  8 : 
  57.  "Wimp_ProcessKey",blk%!24
  58.  9 : 
  59. menuselect(blk%)
  60. *1    
  61.  17,18 : 
  62. receive(blk%!4,blk%!8,blk%!16)
  63.  quit%
  64.  next%
  65. Appl$="ModeHistory"
  66. 3#ApplVersion$="1.00 (21-Mar-95)"
  67. 4$ModVersion$="1.00 (19 Feb 1995)"
  68.  errblk% &100
  69. 6Dmsgcode%=(&DA3C0 << 6) : 
  70.  message action code selected randomly
  71.  msglist% 24
  72. msglist%!0=&400C1
  73. msglist%!4=&400C2
  74. msglist%!8=&400C3
  75. msglist%!12=msgcode%
  76. msglist%!16=10
  77. msglist%!20=0
  78.  "Wimp_Initialise",310,&4B534154,Appl$,msglist% 
  79.  osversion%,thistask%
  80. error
  81.  scrapblk% &100
  82.  blk% &200
  83. indsize%=&200
  84.  indir% indsize%
  85. indirend%=indir%+indsize%
  86. E(ApplDir$=
  87. readvarval("ModeHist$Dir")
  88. codesize%=&1000
  89.  armcode% codesize%
  90. H-thetaskname$=
  91. readvarval("ModeHist$Host")
  92.  check for presence of another copy of myself and of Display Manager
  93. next%=0
  94. thetaskhandle%=0
  95.  "TaskManager_EnumerateTasks",next%,scrapblk%,16 
  96.  next%
  97.  next%>=0 
  98. str(scrapblk%!4) 
  99. Q5      
  100.  thetaskname$ : thetaskhandle%=scrapblk%!0
  101. R<      
  102.  Appl$        : 
  103.  0,Appl$+" is already running"
  104.  next%<0
  105.  thetaskhandle%<>0 
  106. assemble
  107. YK  dummy%=
  108. errbox("Warning: "+Appl$+" needs "+thetaskname$+" to work",1)
  109.  "Wimp_OpenTemplate",,ApplDir$+".Templates"
  110. \"infowin%=
  111. loadtemplate("Info")
  112. ]%$(blk%!(92+7*32+20))=ApplVersion$
  113. ^"menuwin%=
  114. loadtemplate("Menu")
  115.  "Wimp_CloseTemplate"
  116.  "MenuUtil_Initialise",010,0
  117.  "MenuUtil_New",,Appl$ 
  118.  mainmenu%
  119.  "MenuUtil_Add",mainmenu%,"Info" 
  120.  item_info%
  121.  "MenuUtil_SubMenu",item_info%,infowin%
  122.  "MenuUtil_Add",mainmenu%,"Save status" 
  123.  item_savestatus%
  124.  "MenuUtil_Add",mainmenu%,"Quit" 
  125.  item_quit%
  126. f0historysize%=
  127. readvarval("ModeHist$Size"))
  128.  historysize%<3 
  129.  historysize%=3
  130.  modedef$(historysize%)  : 
  131.  full mode descriptor to change mode
  132. iAdesclength%=20              : 
  133.  #chars in lines of the 'menu'
  134.  modedescr% desclength%*historysize% : 
  135.  mode descriptors for the menu
  136.  modedesc%(historysize%)  : 
  137.  -> string describing mode
  138.  i%=0 
  139.  historysize%-1
  140. m-  modedesc%(i%)=modedescr%+i%*desclength%
  141. iconwidth%=16*14+16
  142. iconheight%=44
  143.  pal% 1024
  144. nrofmodes%=0
  145. status_load
  146. mode_add
  147. redraw(handle%)
  148.  more%,top%,linenr%,lastline%,hline%
  149. blk%!0=handle%
  150.  "Wimp_RedrawWindow",,blk% 
  151.  more%
  152. top%=blk%!16-blk%!24
  153.  more%
  154. }*  linenr%=(top%-blk%!40) 
  155.  iconheight%
  156. ~,  lastline%=(top%-blk%!32) 
  157.  iconheight%
  158.  linenr%<=lastline%
  159. #    hline%=nrofmodes%-linenr%-1
  160. ,    
  161.  (hline%<nrofmodes%) 
  162.  (hline%>0) 
  163. $      
  164.  print data for this line
  165. "      
  166.  linenr%=currentline% 
  167. !        
  168.  "Wimp_SetColour",1
  169. %        
  170.  "Wimp_SetColour",128+7
  171.       
  172. !        
  173.  "Wimp_SetColour",7
  174. %        
  175.  "Wimp_SetColour",128+1
  176.       
  177. 1      
  178.  blk%!4,top%-(iconheight%*(linenr%+1))
  179. '      
  180.  96+3,iconwidth%,iconheight%
  181. 1      
  182.  blk%!4+8,top%-(iconheight%*linenr%)-8
  183.        
  184.  $(modedesc%(hline%))
  185.         
  186.     linenr%+=1
  187.  "Wimp_GetRectangle",,blk% 
  188.  more%
  189. menuwin_close
  190. scrapblk%!0=menuwin%
  191.  "Wimp_CloseWindow",,scrapblk%
  192. menuwin_open
  193.  x%,y%,z%
  194. scrapblk%!0=menuwin%
  195.  "Wimp_GetWindowState",,scrapblk%
  196.  x%,y%,z%
  197. scrapblk%!4=x%-3*16
  198. scrapblk%!8=96
  199. 'scrapblk%!12=scrapblk%!4+iconwidth%
  200. $scrapblk%!16=scrapblk%!8+extent%
  201. scrapblk%!28=-1
  202.  "Wimp_OpenWindow",,scrapblk%
  203. currentline%=-1
  204. menuwin_setextent
  205. scrapblk%!0=0
  206. scrapblk%!8=iconwidth%
  207. &extent%=(nrofmodes%-1)*iconheight%
  208.  nrofmodes%<3 
  209.  extent%=3*iconheight%
  210. scrapblk%!4=-extent%
  211. scrapblk%!12=0
  212.  "Wimp_SetExtent",menuwin%,scrapblk%
  213. menuwin_forceredraw(l%)
  214. ymin%=-(l%+1)*iconheight%
  215. ymax%=-l%*iconheight%+4
  216.  "Wimp_ForceRedraw",menuwin%,0,ymin%,iconwidth%,ymax%
  217. status_load
  218.  (ApplDir$+".Status")
  219.  F%<>0 
  220. $    
  221. #F%,modedef$(nrofmodes%),d$
  222. #    $(modedesc%(nrofmodes%))=d$
  223.     nrofmodes%+=1
  224. #F%) 
  225.  (nrofmodes%=historysize%)
  226. menuwin_setextent
  227. status_save
  228.  (ApplDir$+".Status")
  229.  F%<>0 
  230.  i%=0 
  231.  nrofmodes%-1
  232. *    
  233. #F%,modedef$(i%),$(modedesc%(i%))
  234. errbox(err$,boxes%)
  235. errblk%!0=0
  236. $(errblk%+4)=err$+
  237.  "Wimp_ReportError",errblk%,boxes%,Appl$ 
  238.  ,click%
  239. =(click%=1)
  240. error
  241. exit : 
  242. errbox(
  243. $+" (line "+
  244. )+")",3) 
  245.  "Wimp_CloseDown"
  246.  "XOS_Module",4,modname$
  247.  "Wimp_CloseDown"
  248. loadtemplate(name$)
  249.  handle%
  250.  "Wimp_CloseTemplate" : 
  251. error
  252.  "Wimp_LoadTemplate",,blk%+4,indir%,indirend%,-1,name$,0 
  253.  ,,indir%
  254.  "Wimp_CreateWindow",,blk%+4 
  255.  handle%
  256. =handle%
  257. mode_add
  258.  m%,m$,M$,x%,y%,c%,grey%,c$,xeig%,yeig%
  259.  i%,end%
  260.  create mode definition string
  261. x%=1+
  262. mode_readvar(11)
  263. y%=1+
  264. mode_readvar(12)
  265. mode_readvar(9)
  266. xeig%=
  267. mode_readvar(4)
  268. yeig%=
  269. mode_readvar(5)
  270.  c%>3 
  271.   grey%=
  272.  check current palette to see if it's grey
  273.   grey%=
  274.  "ColourTrans_ReadPalette",-1,-1,pal%,1024,0 
  275.  ,,end%
  276.   i%=pal%
  277.  grey% 
  278.  (i%<end%)
  279. K    grey%=((i%?1)=(i%?2)) 
  280.  ((i%?1)=(i%?3)) : 
  281.  are R,G,B values equal?
  282.     i%+=4
  283.  4    : c$+="32k"
  284.  5    : c$+="16M"
  285.  : c$+=
  286. (1<<(1<<c%))
  287. M$="X"+
  288. (x%)+" Y"+
  289. (y%)+" "
  290. 11," ")
  291. m$,1)=
  292. (x%)+"x"+
  293.  grey% 
  294.   M$+="G"
  295. m$,11)="g"
  296.   M$+="C"
  297. (M$+=c$+" EX"+
  298. (xeig%)+" EY"+
  299. (yeig%)
  300. m$+=c$
  301.  m%<256 
  302.  check if already present in history
  303.  (modedef$(i%)<>M$) 
  304.  (i%<nrofmodes%)
  305.   i%+=1
  306.  i%>=nrofmodes% 
  307.  i%<historysize% 
  308.     i%=nrofmodes%
  309.     nrofmodes%+=1
  310. menuwin_setextent
  311.     i%-=1
  312.  move history data
  313.  i%>0
  314. %!  modedef$(i%)=modedef$(i%-1)
  315. &)  $(modedesc%(i%))=$(modedesc%(i%-1))
  316.   i%-=1
  317.  add current mode at top
  318. modedef$(0)=M$
  319. $(modedesc%(0))=m$
  320. mode_change(hline%)
  321.  osversion%<350 
  322.  "Wimp_SetMode",
  323. (modedef$(hline%))
  324.  modedef$(hline%)
  325. mode_readvar(nr%)
  326.  "OS_ReadModeVariable",-1,nr% 
  327.  ,,v%
  328. menuselect(selection%)
  329.  selinfo%,itemnr%,item%,item$,parentitem%
  330.  "MenuUtil_Decode",mainmenu%,selection% 
  331.  ,,selinfo%
  332. itemnr%=selinfo%!0
  333. item%=selinfo%!8
  334. item$=
  335. str(selinfo%!12)
  336. parentitem%=selinfo%!24
  337.  item% 
  338.  item_savestatus%
  339. status_save
  340.  item_quit%
  341.     quit%=
  342. mouseclick(xpos%,ypos%,button%,wndw%,icon%)
  343.  wndw% 
  344.  menuwin%
  345.  button% 
  346.       
  347. N         scrapblk%!0=menuwin%
  348. O/        
  349.  "Wimp_GetWindowState",,scrapblk%
  350. PC        linenr%=(scrapblk%!16-scrapblk%!24-ypos%) 
  351.  iconheight%
  352. Q'        hline%=nrofmodes%-linenr%-1
  353. R0        
  354.  (hline%<nrofmodes%) 
  355.  (hline%>0) 
  356.           
  357. menuwin_close
  358. T"          
  359. mode_change(hline%)
  360.         
  361.       
  362.         blk%!4=blk%!4+66
  363.         
  364. showmenu(blk%)
  365. Y        
  366. readvarval(var$)
  367.  len%
  368.  "OS_ReadVarVal",var$,scrapblk%,256,0 
  369.  ,,len%
  370. scrapblk%?len%=13
  371. =$(scrapblk%)
  372. receive(sender%,ref%,code%)
  373.  icon%,window%,name$,type%
  374.  i%,cmd$
  375.  sender% <> thistask% 
  376.  code% 
  377.       quit%=
  378.       
  379.  desktop save
  380. l"      cmd$="Run "+ApplDir$+
  381. m-      
  382.  "OS_GBPB",2,blk%!20,cmd$,
  383. (cmd$)
  384. n'    
  385.  &400C1 : 
  386.  Message_ModeChange
  387.       
  388. mode_add
  389. p+    
  390.  &400C2 : 
  391.  Message_TaskInitialise
  392. q?      
  393. str(blk%+28)=thetaskname$) 
  394.  (thetaskhandle%=0) 
  395. r"        thetaskhandle%=sender%
  396.         
  397. assemble
  398.       
  399. u*    
  400.  &400C3 : 
  401.  Message_TaskCloseDown
  402. v$      
  403.  sender%=thetaskhandle% 
  404. w&        
  405.  "XOS_Module",4,modname$
  406.         thetaskhandle%=0
  407.       
  408.  msgcode%
  409.       
  410.  -1) 
  411.         
  412.  nrofmodes%>1 
  413.           
  414. menuwin_close
  415.           
  416. mode_change(1)
  417.         
  418.       
  419.         
  420. menuwin_open
  421.       
  422. showmenu(blkptr%)
  423.  "MenuUtil_Show",mainmenu%,blkptr%
  424. str(s%)
  425.  i%,n$
  426.  (s%?i%>=32) 
  427.  (i%<255)
  428.   n$+=
  429. (s%?i%)
  430.   i%+=1
  431. assemble
  432. LR = 14
  433. PC = 15
  434. modname$=Appl$
  435.  pass%=8 
  436.   P% = armcode%
  437.   L% = P% + codesize%
  438.   [ OPT pass%
  439. ?  EQUD     0                         ; offset to start code
  440. H  EQUD     initCode-top              ; offset to initialization code
  441. F  EQUD     exitCode-top              ; offset to finalization code
  442. I  EQUD     0                         ; offset to service call handler
  443. A  EQUD     titleStr-top              ; offset to title string
  444. @  EQUD     helpStr-top               ; offset to help string
  445. G  EQUD     0                         ; offset to help&command table
  446. .titleStr
  447.   EQUS     modname$+
  448.   ALIGN
  449. .helpStr
  450. )  EQUS     modname$+
  451. 9+ModVersion$+
  452.   ALIGN
  453. .thetaskhandle
  454.   EQUD     thetaskhandle%
  455. .msgcode
  456.   EQUD     msgcode%
  457. .thistaskhandle
  458.   EQUD     thistask%
  459. .filtermask
  460. !  EQUD     &FFFFFFFF 
  461.  (1<<6)
  462. .filtername
  463.   EQUS     Appl$+
  464.   ALIGN
  465. .initCode
  466.   STMFD    R13!,{R0-R4,LR}
  467.   ADR      R0,filtername
  468.   ADR      R1,filterit
  469.   MOV      R2,#0
  470.   LDR      R3,thetaskhandle
  471.   LDR      R4,filtermask
  472. +  SWI      "XFilter_RegisterPostFilter"
  473. 2  LDMFD    R13!,{R0-R4,PC}            ; return
  474. .exitCode
  475.   STMFD    R13!,{R0-R4,LR}
  476.   ADR      R0,filtername
  477.   ADR      R1,filterit
  478.   MOV      R2,#0
  479.   LDR      R3,thetaskhandle
  480.   LDR      R4,filtermask
  481. -  SWI      "XFilter_DeRegisterPostFilter"
  482.   LDMFD    R13!,{R0-R4,PC}^
  483. .filterit
  484.   STMFD    R13!,{R1-R3,LR}
  485.   LDR      R3,[R1,#8]
  486. C  TST      R3,#1                       ; test if Adjust pressed
  487.   BEQ      filterit_end
  488. F  LDR      R3,[R1,#12]                 ; test for click on iconbar
  489.   CMN      R3,#2
  490.   BNE      filterit_end
  491. /  ; transfer the event to the ModeHist task
  492. 4  LDR      R3,[R1,#0]                  ; X coord
  493. +  STR      R3,[R1,#20]                 
  494. 4  LDR      R3,[R1,#4]                  ; Y coord
  495.   STR      R3,[R1,#24]
  496. :  LDR      R3,[R1,#8]                  ; mouse buttons
  497.   STR      R3,[R1,#28]
  498. :  LDR      R3,[R1,#12]                 ; window handle
  499.   STR      R3,[R1,#32]
  500. 8  LDR      R3,[R1,#16]                 ; icon handle
  501.   STR      R3,[R1,#36]
  502.   MOV      R0,#17
  503. 9  MOV      R3,#40                      ; message size
  504.   STR      R3,[R1,#0]
  505.   MOV      R3,#0
  506. 5  STR      R3,[R1,#12]                 ; your_ref
  507.   LDR      R3,msgcode
  508.   STR      R3,[R1,#16]
  509.    LDR      R2,thistaskhandle
  510. "  SWI      "XWimp_SendMessage"
  511. <  MVN      R0,#0                       ; claim the event
  512. .filterit_end
  513.   LDMFD    R13!,{R1-R3,PC}
  514. .bottom
  515.  pass%
  516.  "OS_Module",11,top,(bottom-top)
  517.